package com.sojson.util.pay.wx.bean;

import java.util.Map;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sojson.base.impl.BaseUtilDto;
import com.sojson.util.pay.wx.bean.child.param.WxPamContent;
import com.sojson.util.pay.wx.bean.child.param.WxPamLineColor;
import com.sojson.util.pay.wx.bean.child.param.WxPamValue;

import lombok.Data;

/**
 * 微信普通接口参数Bean
 * 
 * @author liu
 * @date 2020-09-03
 */
@Data
public class WxParam extends BaseUtilDto {

    /***/
    private static final long serialVersionUID = 2231406852564862492L;

    /** Appid */
    private String appid;
    /** Appsecret */
    private String secret;
    /** 接口调用凭证 */
    private String accessToken;
    /** 获取用户信息需要的Code */
    private String code;
    /**
     * 小程序码参数,最大32个可见字符,只支持数字,大小写英文以及部分特殊字符(!#$&'()*+,/:;=?@-._~)<BR/>
     * 其它字符请自行编码为合法字符(因不支持%,中文无法使用urlencode处理,请使用其他编码方式)<BR/>
     */
    private String scene;
    /**
     * 跳转的页面,必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index<BR/>
     * 根路径前不要填加/,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面<BR/>
     */
    private String page;
    /** 二维码的宽度,单位 px,最小 280px,最大 1280px */
    private Integer width;
    /** 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认false */
    private Boolean autoColor;
    /** auto_color为false时生效,使用rgb设置颜色,例如{"r":"xxx","g":"xxx","b":"xxx"}十进制表示  */
    private WxPamLineColor lineColor;
    /** 是否需要透明底色,为true时,生成透明底色的小程序 */
    private Boolean isHyaline;
    /** 接收者（用户）的 openid */
    private String touser;
    /** 所需下发的订阅模板id */
    private String templateId;
    /** 企业微信应用ID */
    private String agentid;
    /** 企业微信推送消息类型 */
    private String msgtype;
    /** 企业微信消息内容 */
    private WxPamContent text;
    /** 跳转小程序类型,developer为开发版,trial为体验版,formal为正式版(默认为正式版) */
    private String miniprogramState;
    /** 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } */
    private Map<String, WxPamValue> data;

    public WxParam() {}

    /**
     * 获取Appid
     * 
     * @return
     */
    public String getAppid() {
        return appid;
    }

    /**
     * 设置Appid
     * 
     * @param appid
     */
    public void setAppid(String appid) {
        this.appid = appid;
    }

    /**
     * 获取Appsecret
     * 
     * @return
     */
    public String getSecret() {
        return secret;
    }

    /**
     * 设置Appsecret
     * 
     * @param appsecret
     */
    public void setSecret(String secret) {
        this.secret = secret;
    }

    /**
     * 获取接口调用凭证
     * 
     * @return
     */
    @JsonProperty("access_token")
    @JSONField(name = "access_token")
    public String getAccessToken() {
        return accessToken;
    }

    /**
     * 设置接口调用凭证
     * 
     * @param accessToken
     */
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    /**
     * 获取获取用户信息需要的Code
     * 
     * @return
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置获取用户信息需要的Code
     * 
     * @param code
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取小程序码参数,最大32个可见字符,只支持数字,大小写英文以及部分特殊字符(!#$&'()*+,/:;=?@-._~)<BR/>
     * 其它字符请自行编码为合法字符(因不支持%,中文无法使用urlencode处理,请使用其他编码方式)<BR/>
     * 
     * @return
     */
    public String getScene() {
        return scene;
    }

    /**
     * 设置小程序码参数,最大32个可见字符,只支持数字,大小写英文以及部分特殊字符(!#$&'()*+,/:;=?@-._~)<BR/>
     * 其它字符请自行编码为合法字符(因不支持%,中文无法使用urlencode处理,请使用其他编码方式)<BR/>
     * 
     * @param scene
     */
    public void setScene(String scene) {
        this.scene = scene;
    }

    /**
     * 获取跳转的页面,必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index<BR/>
     * 根路径前不要填加/,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面<BR/>
     * 
     * @return
     */
    public String getPage() {
        return page;
    }

    /**
     * 设置跳转的页面,必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index<BR/>
     * 根路径前不要填加/,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面<BR/>
     * 
     * @param page
     */
    public void setPage(String page) {
        this.page = page;
    }

    /**
     * 获取二维码的宽度,单位 px,最小 280px,最大 1280px 
     * 
     * @return
     */
    public Integer getWidth() {
        return width;
    }

    /**
     * 设置二维码的宽度,单位 px,最小 280px,最大 1280px 
     * 
     * @param width
     */
    public void setWidth(Integer width) {
        this.width = width;
    }

    /**
     * 获取自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认false
     * 
     * @return
     */
    @JsonProperty("auto_color")
    @JSONField(name = "auto_color")
    public Boolean getAutoColor() {
        return autoColor;
    }

    /**
     * 设置自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认false
     * 
     * @param autoColor
     */
    public void setAutoColor(Boolean autoColor) {
        this.autoColor = autoColor;
    }

    /**
     * 获取auto_color为false时生效,使用rgb设置颜色,例如{"r":"xxx","g":"xxx","b":"xxx"}十进制表示
     * 
     * @return
     */
    @JsonProperty("line_color")
    @JSONField(name = "line_color")
    public WxPamLineColor getLineColor() {
        return lineColor;
    }

    /**
     * 设置auto_color为false时生效,使用rgb设置颜色,例如{"r":"xxx","g":"xxx","b":"xxx"}十进制表示
     * 
     * @param lineColor
     */
    public void setLineColor(WxPamLineColor lineColor) {
        this.lineColor = lineColor;
    }

    /**
     * 获取是否需要透明底色,为true时,生成透明底色的小程序
     * 
     * @return
     */
    @JsonProperty("is_hyaline")
    @JSONField(name = "is_hyaline")
    public Boolean getIsHyaline() {
        return isHyaline;
    }

    /**
     * 设置是否需要透明底色,为true时,生成透明底色的小程序
     * 
     * @param isHyaline
     */
    public void setIsHyaline(Boolean isHyaline) {
        this.isHyaline = isHyaline;
    }

    /**
     * 获取接收者（用户）的 openid
     * 
     * @return
     */
    public String getTouser() {
        return touser;
    }

    /**
     * 设置接收者（用户）的 openid
     * 
     * @param touser
     */
    public void setTouser(String touser) {
        this.touser = touser;
    }

    /**
     * 获取所需下发的订阅模板id
     * 
     * @return
     */
    @JsonProperty("template_id")
    @JSONField(name = "template_id")
    public String getTemplateId() {
        return templateId;
    }

    /**
     * 设置所需下发的订阅模板id
     * 
     * @param templateId
     */
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }

    /**
     * 获取跳转小程序类型,developer为开发版,trial为体验版,formal为正式版(默认为正式版)
     * 
     * @return
     */
    @JsonProperty("miniprogram_state")
    @JSONField(name = "miniprogram_state")
    public String getMiniprogramState() {
        return miniprogramState;
    }

    /**
     * 设置跳转小程序类型,developer为开发版,trial为体验版,formal为正式版(默认为正式版)
     * 
     * @param miniprogramState
     */
    public void setMiniprogramState(String miniprogramState) {
        this.miniprogramState = miniprogramState;
    }

    /**
     * 获取模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
     * 
     * @return
     */
    public Map<String, WxPamValue> getData() {
        return data;
    }

    /**
     * 设置模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
     * 
     * @param data
     */
    public void setData(Map<String, WxPamValue> data) {
        this.data = data;
    }

}